#ifndef __USART_CONFIG_H__
#define __USART_CONFIG_H__

#include "stm32f4xx.h"
// stm32 usart 从1开始
#define USE_USART_1  1  // 0:不启用  1:启用  
#define USE_USART_2  0 
#define USE_USART_3  0 
#define USE_UART_4   0  // uart 只支持同步 代码上没有区别 在电路设计有区别
#define USE_UART_5   0 
#define USE_USART_6  0 
#define USE_UART_7   0 
#define USE_UART_8   0 

// ************************** USART_1 *****************************
#if USE_USART_1

// 功能开关配置
#define USART1_RX_BUFFER_LEN 		1024     // 接收缓冲区大小
#define USE_USART1_PRINTF  1                 // 是否使用usart 整合之后的 printf打印功能 
#define USE_USART1_RECIVE  1                 // 是否外部实现接收函数 Usart1_on_recv
#define USE_USART1_DMA     1                 // usart1是否结合DMA功能

// usart相关配置
//-------------TX CONFIG------------------------------
#define USART1_TX_RCU      RCC_AHB1Periph_GPIOA   // 使能GPIOA的时钟
#define USART1_TX_PORT     GPIOA                  // 使用GPIOA端口
#define USART1_TX_PIN      GPIO_Pin_9             // 使用GPIOA的第9号引脚
#define USART1_TX_AF       GPIO_AF_USART1         // 使用USART1的复用功能
#define USART1_TX_AF_PIN   GPIO_PinSource9        // 使用GPIOA的第9号引脚作为复用功能的引脚源
//-------------RX CONFIG------------------------------
#define USART1_RX_RCU      RCC_AHB1Periph_GPIOA   // 使能GPIOA的时钟
#define USART1_RX_PORT     GPIOA                  // 使用GPIOA端口
#define USART1_RX_PIN      GPIO_Pin_10            // 使用GPIOA的第10号引脚
#define USART1_RX_AF       GPIO_AF_USART1         // 使用USART1的复用功能
#define USART1_RX_AF_PIN   GPIO_PinSource10       // 使用GPIOA的第10号引脚作为复用功能的引脚源
//-------------USART------------------------------
#define USART1_BAUDRATE              115200   // 波特率
#define USART1_Preemption_Priority   2        // 抢占优先级 
#define USART1_Sub_Priority          2        // 响应优先级 

#if USE_USART1_DMA
// DMA配置
//-------------TX CONFIG------------------------------
#define USART1_TX_DMA_RCU      RCC_AHB1Periph_DMA2  // 使能DMA2的时钟
#define USART1_TX_DMA_STREAM    DMA2_Stream7        // 使用DMA2的Stream7
#define USART1_TX_DMA_CHANNEL   DMA_Channel_4       // 使用DMA的通道4
#define USART1_TX_DMA_PRIORITY  DMA_Priority_Low    // 设置DMA优先级为低
//-------------RX CONFIG------------------------------
#define USART1_RX_DMA_RCU      RCC_AHB1Periph_DMA2  // 使能DMA2的时钟
#define USART1_RX_DMA_STREAM    DMA2_Stream2        // 使用DMA2的Stream2
#define USART1_RX_DMA_CHANNEL   DMA_Channel_4       // 使用DMA的通道4
#define USART1_RX_DMA_PRIORITY  DMA_Priority_High   // 设置DMA优先级为高

#endif
#endif

#endif